home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Beispiel_2; (* Direktes Einbinden der Sprites *)
- (* in das Programm. *)
- (* Der Code wird zwar länger, das *)
- (* Programm aber auch schneller; *)
- (* vor allem aber benötigt es dann*)
- (* keine externen Dateien mehr. *)
-
- uses crt,dos,graph;
-
- VAR gd,gm,x,y,i : integer;
- s1,s2,s3,s4 : word; (* Größe der Sprites *)
- p1,p2,p3,p4 : pointer; (* Pointer-Variablen für die Sprites *)
-
- CONST pos1 : Array [1..4] of pointtype =
- ((x:20; y:237),(x:40; y:237),(x:40; y:180),(x:20; y:185));
- (* Die Koordinaten des "Tors" *)
-
- (* Zunächst müßen aus den gespeicherten Sprites (Endung .SPR) Objekt- *)
- (* Dateien (Endung .OBJ) gemacht werden. *)
- (* Dies geschieht durch Aufruf des mit Turbo Pascal mitgelieferten *)
- (* Hilfsprogramms BINOBJ.EXE. *)
- (* Lesen Sie zum Gebrauch am besten das Turbo-Handbuch *)
- (* Hier wurden die Objekt-Dateien erzeugt mit dem Befehl *)
- (* "binobj bild1.spr bild1.obj bild1" usw.. *)
-
- PROCEDURE Bild1; External; {$L bild1.obj} (* Einbinden der OBJ- *)
- PROCEDURE Bild2; External; {$L bild2.obj} (* Dateien in das *)
- PROCEDURE Bild3; External; {$L bild3.obj} (* Programm. *)
- PROCEDURE Ball; External; {$L ball.obj}
-
- BEGIN
- gd := detect; initgraph (gd,gm,getenv('bgipfad'));
- (* statt gentenv... muß hier der Pfad zu dem Verzeichnis stehen, in dem *)
- (* sich Ihre BGI-Dateien befinden. Oder Sie lösen das so wie ich; *)
- (* ich habe den Pfad zu meinen BGI- und CHR-Dateien in einer Environment- *)
- (* Variablen mit Namen BGIPFAD gesetzt (das bedeutet: in die Autoexec.bat *)
- (* Datei kommt der Befehl "set bgipfad=C:\PASCAL\BGI", wobei natürlich *)
- (* das richtige Verzeichnis angegeben werden muß). Diese Variable kann *)
- (* man dann bequem mit Getenv('bgipfad') im Programm abfragen. *)
- (* Dies geht allerdings erst ab Turbo Pascal 5.0... *)
-
- p1 := addr(bild1); (* Die Adressen der extern eingebundenen *)
- p2 := addr(bild2); (* Sprites werden den Pointer-Variablen *)
- p3 := addr(bild3); (* zugewiesen. *)
- p4 := addr(ball);
-
- (* Von hier ab gehts gleich, wie in BSP1.PAS *)
-
- clearviewport;
- line (0,237,getmaxx,237); (* ein bißchen Verzierung... *)
- setfillstyle (8,white);
- fillpoly (4,pos1);
- settextjustify (centertext,centertext);
- outtextxy (getmaxx div 2,50,'Beispiel 2 : Sprites im Code eingebunden');
- x := 600; y := 200;
- putimage (260,228,p4^,xorput); (* Ball ausgeben *)
-
- For i := 1 to 21 do (* Der Spieler nimmt Anlauf... *)
- BEGIN
- putimage (x,y,p1^,xorput); (* erst Bild ausgeben... *)
- delay (100-2*i); (* warten... *)
- putimage (x,y,p1^,xorput); (* und wieder löschen. *)
- dec (x,4);
- putimage (x,y,p2^,xorput); (* und jetzt dasselbe nochmal *)
- delay (100-2*i);
- putimage (x,y,p2^,xorput);
- dec (x,4);
- putimage (x,y,p1^,xorput);
- delay (100-2*i);
- putimage (x,y,p1^,xorput);
- dec (x,4);
- putimage (x,y,p3^,xorput);
- delay (100-2*i);
- putimage (x,y,p3^,xorput);
- dec (x,4);
- END;
- putimage (x,y,p3^,xorput);
- y := 228;
- putimage (260,228,p4^,xorput); (* Ball löschen *)
- While x > 30 do
- BEGIN
- putimage (x,y,p4^,xorput); (* und jetzt bewegen *)
- delay ((300 - x) div 4);
- putimage (x,y,p4^,xorput);
- dec(x,4);
- END;
- outtextxy (getmaxx div 2,280,'Bitte Taste drücken...');
- Repeat Until keypressed;
- closegraph;
- END.
-
-